package com.scalar.chiptrack.operations.dataentry.assembly.actioncommands;

import com.scalar.chiptrack.actioncommands.ActionCommand;
import com.scalar.chiptrack.operations.dataentry.assembly.forms.AssemblyDataEntryForm;
import com.scalar.chiptrack.operations.dataentry.LotDetails;
import com.scalar.chiptrack.operations.dataentry.dao.DataEntryDAO;
import com.scalar.chiptrack.operations.process.Lot;
import com.scalar.chiptrack.operations.process.VendorLocation;
import com.scalar.chiptrack.operations.process.dao.PartNumber;
import com.scalar.chiptrack.users.User;
import com.scalar.chiptrack.users.Functionality;
import com.scalar.chiptrack.commons.SessionKeys;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForm;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.util.HashMap;
import java.util.ArrayList;

/**
 * Created by IntelliJ IDEA.
 * User: Sudhakar
 * Date: Jan 24, 2007
 * Time: 9:04:58 PM
 */
public class AssemblyDataEntryLoadFabLotNumbersCommand extends ActionCommand
{


    private static final String ACTION_NAME = "/assemblyDataEntry.do" ;


    public ActionForward execute(ActionMapping mapping,
                                 ActionForm form,
                                 HttpServletRequest request,
                                 HttpServletResponse response) throws Exception
    {
        AssemblyDataEntryForm assemblyDataEntryForm = (AssemblyDataEntryForm) form;

        HashMap errors = new HashMap();
        HashMap info = new HashMap();
        String action = request.getParameter("action");

        request.setAttribute(INFO_MESSAGES, info);
        request.setAttribute(ERROR_MESSAGES, errors);


        HttpSession mSession = request.getSession();
        User user = (User) mSession.getAttribute(SessionKeys.USER_KEY);

        if (user == null)
        {
            mSession.setAttribute(SessionKeys.SOURCE_PAGE_KEY, ACTION_NAME);
            return (mapping.findForward("login"));
        }
        else
        {
            if (user.isActionAllowed(Functionality.DATA_ENTRY, User.USER_ACTION_MODIFY))
            {
                request.setAttribute("showMessage", "FALSE");
            }
            else
            {
                request.setAttribute("showMessage", "TRUE");
            }
        }
        ArrayList fabLotNumberList;
        ArrayList partNumberList;
        ArrayList locationList;
        Lot lot;
        PartNumber partNumber;
        VendorLocation location;       

        ArrayList assemblyPartNumbersLableValueBeans    = new ArrayList();
        ArrayList assemblyLocationsLableValueBeans      = new ArrayList();
        ArrayList assemblyfabLotNumberLabelValueBeans   = new ArrayList();

        try
        {
            partNumberList = DataEntryDAO.getPartNumber(LOCATION_TYPE_ASSEMBLY);

            for (int i = 0; i < partNumberList.size(); i++)
            {
                partNumber = (PartNumber) partNumberList.get(i);
                assemblyPartNumbersLableValueBeans.add(new org.apache.struts.util.LabelValueBean(partNumber.getPartNumber(), partNumber.getProcessStepId()));
                assemblyDataEntryForm.setProcessType( partNumber.getProcessType());
            }

            locationList = DataEntryDAO.getSelectedLocations(Integer.parseInt(assemblyDataEntryForm.getProcessStepId()));
            for (int i = 0; i < locationList.size(); i++)
            {
                location = (VendorLocation) locationList.get(i);
                assemblyLocationsLableValueBeans.add(new org.apache.struts.util.LabelValueBean(location.getLocationName(), location.getLocationID()));
            }

            assemblyDataEntryForm.setFabLotNo("0");
            fabLotNumberList = DataEntryDAO.getRunningFabLotNumbersByPSTypeName( assemblyDataEntryForm.getProcessStepId(), assemblyDataEntryForm.getLocationId() );
            for (int i = 0; i < fabLotNumberList.size(); i++)
            {
                lot = (Lot) fabLotNumberList.get(i);
                assemblyfabLotNumberLabelValueBeans.add(new org.apache.struts.util.LabelValueBean( lot.getFabLotnumber(), lot.getFabLotnumber()));
            }

            assemblyDataEntryForm.setPoId("0");
            assemblyDataEntryForm.setLotId( "0" );

            request.setAttribute("partNumbersList", assemblyPartNumbersLableValueBeans);
            request.setAttribute("locationList", assemblyLocationsLableValueBeans);
            request.setAttribute("assemblyFabLotNoList", assemblyfabLotNumberLabelValueBeans);
            request.setAttribute("action", action);
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        return mapping.findForward("assemblyDataEntry");
    }
}
